package exercises.leetcode;

/**
 * <a href="https://leetcode-cn.com/problems/maximum-product-subarray/">
 * 152. 乘积最大子数组</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
 * <p>
 * 示例 1:
 * <p>
 * 输入: [2,3,-2,4]
 * 输出: 6
 * 解释: 子数组 [2,3] 有最大乘积 6。
 * <p>
 * 示例 2:
 * <p>
 * 输入: [-2,0,-1]
 * 输出: 0
 * 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
 *
 * @author or2
 * @date 2021年09月26日 时间: 20:39
 */
public class No152 {
    public int maxProduct(int[] nums) {
        int max = 1, min = 1, ans = Integer.MIN_VALUE;
        for (int num : nums) {
            /*交换*/
            if (num < 0) {
                int temp = max;
                max = min;
                min = temp;
            }
            /*更新值*/
            max = Math.max(max * num, num);
            min = Math.min(min * num, num);
            ans = Math.max(max, ans);
        }

        return ans;
    }
}
